home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_UniqueValueTreeOwned.h < prev    next >
C/C++ Source or Header  |  2000-04-06  |  9KB  |  238 lines

  1. #ifndef CB_UNIQUEVALUETREE_OWNED_H
  2. #define CB_UNIQUEVALUETREE_OWNED_H
  3.  
  4. #include "CB_UniqueValueTree.h"
  5.  
  6. // defines for include files
  7. #define RELATION_TEMPLATE_UNIQUEVALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  8. private:\
  9.     ClassTo* _first##NameTo;\
  10.     int _count##NameTo;\
  11. \
  12. public:\
  13.     void Add##NameTo(ClassTo* item)\
  14.     {\
  15.         METHOD_UNIQUEVALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  16.     }\
  17.     void Remove##NameTo(ClassTo* item)\
  18.     {\
  19.         METHOD_UNIQUEVALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  20.     }\
  21.     void RemoveAll##NameTo()\
  22.     {\
  23.         METHOD_UNIQUEVALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  24.     }\
  25.     void DeleteAll##NameTo()\
  26.     {\
  27.         METHOD_UNIQUEVALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  28.     }\
  29.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  30.     {\
  31.         METHOD_UNIQUEVALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  32.     }\
  33.     ClassTo* GetFirst##NameTo() const\
  34.     {\
  35.         METHOD_UNIQUEVALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  36.     }\
  37.     ClassTo* GetLast##NameTo() const\
  38.     {\
  39.         METHOD_UNIQUEVALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  40.     }\
  41.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  42.     {\
  43.         METHOD_UNIQUEVALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  44.     }\
  45.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  46.     {\
  47.         METHOD_UNIQUEVALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  48.     }\
  49.     int Get##NameTo##Count() const\
  50.     {\
  51.         METHOD_UNIQUEVALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  52.     }\
  53.     ITERATOR_TEMPLATE_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  54.  
  55. #define RELATION_TEMPLATE_NOFILTER_UNIQUEVALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  56. private:\
  57.     ClassTo* _first##NameTo;\
  58.     int _count##NameTo;\
  59. \
  60. public:\
  61.     void Add##NameTo(ClassTo* item)\
  62.     {\
  63.         METHOD_UNIQUEVALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     }\
  65.     void Remove##NameTo(ClassTo* item)\
  66.     {\
  67.         METHOD_UNIQUEVALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  68.     }\
  69.     void RemoveAll##NameTo()\
  70.     {\
  71.         METHOD_UNIQUEVALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  72.     }\
  73.     void DeleteAll##NameTo()\
  74.     {\
  75.         METHOD_UNIQUEVALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  76.     }\
  77.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  78.     {\
  79.         METHOD_UNIQUEVALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  80.     }\
  81.     ClassTo* GetFirst##NameTo() const\
  82.     {\
  83.         METHOD_UNIQUEVALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  84.     }\
  85.     ClassTo* GetLast##NameTo() const\
  86.     {\
  87.         METHOD_UNIQUEVALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  88.     }\
  89.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  90.     {\
  91.         METHOD_UNIQUEVALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  92.     }\
  93.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  94.     {\
  95.         METHOD_UNIQUEVALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  96.     }\
  97.     int Get##NameTo##Count() const\
  98.     {\
  99.         METHOD_UNIQUEVALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  100.     }\
  101.     ITERATOR_TEMPLATE_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  102.  
  103. #define RELATION_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. private:\
  105.     ClassTo* _first##NameTo;\
  106.     int _count##NameTo;\
  107. \
  108. protected:\
  109. \
  110. public:\
  111.     void Add##NameTo(ClassTo* item);\
  112.     void Remove##NameTo(ClassTo* item);\
  113.     void DeleteAll##NameTo();\
  114.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  115.     ClassTo* GetFirst##NameTo() const;\
  116.     ClassTo* GetLast##NameTo() const;\
  117.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  118.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  119.     int Get##NameTo##Count() const;\
  120.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  121.  
  122. #define RELATION_NOFILTER_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  123. private:\
  124.     ClassTo* _first##NameTo;\
  125.     int _count##NameTo;\
  126. \
  127. protected:\
  128. \
  129. public:\
  130.     void Add##NameTo(ClassTo* item);\
  131.     void Remove##NameTo(ClassTo* item);\
  132.     void DeleteAll##NameTo();\
  133.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  134.     ClassTo* GetFirst##NameTo() const;\
  135.     ClassTo* GetLast##NameTo() const;\
  136.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  137.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  138.     int Get##NameTo##Count() const;\
  139.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  140.  
  141. #define RELATION_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142.     RELATION_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  143.  
  144. // defines implementation
  145. #define INIT_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  146.    INIT_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  147.  
  148. #define EXIT_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  149.     { for (ClassTo* item = GetFirst##NameTo(); item; item = GetFirst##NameTo())\
  150.           delete item; }
  151.  
  152. #define REPLACE_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  153.     REPLACE_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  154.  
  155. #define INIT_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  156.     _ref##NameFrom = (ClassFrom*)0;\
  157.     _parent##NameFrom = (ClassTo*)0;\
  158.     _left##NameFrom = (ClassTo*)0;\
  159.     _right##NameFrom = (ClassTo*)0;\
  160.     assert(p##NameFrom);\
  161.     p##NameFrom->Add##NameTo(this);
  162.  
  163. #define EXIT_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  164.     EXIT_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  165.  
  166. #define REPLACE_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  167.     _ref##NameFrom = (ClassFrom*)0;\
  168.     _parent##NameFrom = (ClassTo*)0;\
  169.     _left##NameFrom = (ClassTo*)0;\
  170.     _right##NameFrom = (ClassTo*)0;\
  171.     pOld->_ref##NameFrom->Replace##NameTo(pOld, this);
  172.  
  173. #define REMOVE_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  174.     { for (ClassTo* item = GetFirst##NameTo(); item; item = GetFirst##NameTo())\
  175.           (void)new UndoSubDelete(item); }
  176.  
  177. #define SAVE_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  178.     SAVE_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  179.  
  180. #define RESTORE_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  181.     RESTORE_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  182.  
  183. #define REMOVE_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  184.     REMOVE_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  185.  
  186. #define CLEANUP_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  187.     CLEANUP_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  188.  
  189. #define METHODS_UNIQUEVALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  190. void ClassFrom##::Add##NameTo(ClassTo* item)\
  191. {\
  192.     METHOD_UNIQUEVALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  193. }\
  194. \
  195. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  196. {\
  197.     METHOD_UNIQUEVALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  198. }\
  199. \
  200. void ClassFrom##::DeleteAll##NameTo()\
  201. {\
  202.     METHOD_UNIQUEVALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  203. }\
  204. \
  205. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  206. {\
  207.     METHOD_UNIQUEVALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  208. }\
  209. \
  210. ClassTo* ClassFrom##::GetFirst##NameTo() const\
  211. {\
  212.     METHOD_UNIQUEVALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  213. }\
  214. \
  215. ClassTo* ClassFrom##::GetLast##NameTo() const\
  216. {\
  217.     METHOD_UNIQUEVALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  218. }\
  219. \
  220. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos) const\
  221. {\
  222.     METHOD_UNIQUEVALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  223. }\
  224. \
  225. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos) const\
  226. {\
  227.     METHOD_UNIQUEVALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  228. }\
  229. \
  230. int ClassFrom##::Get##NameTo##Count() const\
  231. {\
  232.     METHOD_UNIQUEVALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  233. }
  234.  
  235. #define METHODS_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  236.  
  237. #endif
  238.